package com.qinglei.recoup.system.service;

import com.qinglei.recoup.common.domain.CommonRes;
import com.qinglei.recoup.common.exception.RedisConnectException;
import com.qinglei.recoup.system.domain.TourLog;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qinglei.recoup.system.domain.TourStatisticsBO;
import com.qinglei.recoup.system.pojo.TourStatusVO;
import com.qinglei.recoup.system.pojo.TourTimeVO;

import java.time.LocalDate;
import java.util.List;

/**
 * @author syp
 */
public interface TourLogService extends IService<TourLog> {

    /**
     * 护工和院长首页 获取巡视时间表接口
     * @return
     */
    CommonRes<List<TourStatusVO>> getListWithStatus();

    /**
     * 护工首页 完成巡视接口
     * @return
     */
    CommonRes succeedTour(String time);

    /**
     * 载入巡视时段到redis
     * @throws RedisConnectException
     */
    void loadTourTimeRedisCache() throws RedisConnectException;

    /**
     * 更新巡视时间段缓存
     * @param oldTourTime
     * @param newTourTime
     * @throws RedisConnectException
     */
    void updateTourTimeCache(TourTimeVO oldTourTime, TourTimeVO newTourTime) throws RedisConnectException;

    /**
     * 删除巡视时间时间段缓存
     * @param tourTimeVO
     * @throws RedisConnectException
     */
    void delTourTimeCache(TourTimeVO tourTimeVO) throws RedisConnectException;

    /**
     * 添加巡视时间时间段到缓存
     * @param tourTimeVO
     * @return 是否是当前巡视时间段
     * @throws RedisConnectException
     */
    boolean addTourTimeCache(TourTimeVO tourTimeVO) throws RedisConnectException;

    /**
     * 获取当前巡视时间段
     * @return
     * @throws RedisConnectException
     */
    TourTimeVO getCurTourTime(Integer tenantId) throws RedisConnectException;

    /**
     * 巡视时间时间段开始时的处理
     * @param tourTimeVO
     */
    void procTourTimeStart(TourTimeVO tourTimeVO) throws RedisConnectException;

    /**
     * 巡视时间时间段结束时的处理
     * @param tourTimeVO
     */
    void procTourTimeEnd(TourTimeVO tourTimeVO) throws RedisConnectException;

    /**
     * 推送巡查通知消息
     *
     * @param tourTimeVO
     * @param status
     */
    void pushTourEvent(TourTimeVO tourTimeVO, Integer status);

    /**
     * 查询当天巡查次数
     * @param userId
     * @return
     */
    Integer getTodayTour(Long userId);

    /**
     * 获取指定日期的巡查数据
     * @param userId
     * @param day
     * @return
     */
    TourStatisticsBO getTourDataByDay(Long userId, LocalDate day);
}
